Date.prototype.format = function(format)
{
    var o =
    {
        "M+" : this.getMonth()+1, //month
        "d+" : this.getDate(),    //day
        "H+" : this.getHours(),   //hour
        "m+" : this.getMinutes(), //minute
        "s+" : this.getSeconds(), //second
        "q+" : Math.floor((this.getMonth()+3)/3),  //quarter
        "S" : this.getMilliseconds() //millisecond
    }
    if(/(y+)/.test(format))
    format=format.replace(RegExp.$1,(this.getFullYear()+"").substr(4 - RegExp.$1.length));
    for(var k in o)
    if(new RegExp("("+ k +")").test(format))
    format = format.replace(RegExp.$1,RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));
    return format;
}
/**
 * 对日期进行截断
 */
Date.prototype.cut = function( type ){
	var y = this.getYear();
	var m = this.getMonth();
	var d = this.getDate();
	var h = this.getHours();
	var mi = this.getMinutes();
	var s = this.getSeconds();
	var ms = this.getMilliseconds();
	//
	if( type=="year" ){
		var date = new Date(y, 0, 1, 0, 0, 0);
		this.setTime( date.getTime() );
		return ;
	}
	if( type=="month" ){
		var date = new Date(y, m, 1, 0, 0, 0);
		this.setTime( date.getTime() );
		return ;
	}
	if( type=="day" || type=="date" ){
		var date = new Date(y, m, d, 0, 0, 0);
		this.setTime( date.getTime() );
		return ;
	}
	if( type=="hour" ){
		var date = new Date(y, m, d, h, 0, 0);
		this.setTime( date.getTime() );
		return ;
	}
	if( type=="minute" ){
		var date = new Date(y, m, d, h, mi, 0);
		this.setTime( date.getTime() );
		return ;
	}
	if( type=="second" ){
		var date = new Date(y, m, d, h, mi, s);
		this.setTime( date.getTime() );
		return ;
	}
	var date = new Date(y, m, d, h, mi, s, ms);
	this.setTime( date.getTime() );
	return ;
}

/**
 * 对时间进行增减
 */
Date.prototype.add = function( type, amount ){
	var y = this.getFullYear();
	var m = this.getMonth();
	var d = this.getDate();
	var h = this.getHours();
	var mi = this.getMinutes();
	var s = this.getSeconds();
	var ms = this.getMilliseconds();
	//
	if( type=="year" ){
		var date = new Date(y+amount, m, d, h, mi, s, ms);
		this.setTime( date.getTime() );
		return ;
	}
	if( type=="month" ){
		var date = new Date(y, m+amount, d, h, mi, s, ms);
		this.setTime( date.getTime() );
		return ;
	}
	if( type=="day" || type=="date" ){
		var date = new Date(y, m, d+amount, h, mi, s, ms);
		this.setTime( date.getTime() );
		return ;
	}
	if( type=="hour" ){
		var date = new Date(y, m, d, h+amount, mi, s, ms);
		this.setTime( date.getTime() );
		return ;
	}
	if( type=="minute" ){
		var date = new Date(y, m, d, h, mi+amount, s, ms);
		this.setTime( date.getTime() );
		return ;
	}
	if( type=="second" ){
		var date = new Date(y, m, d, h, mi, s+amount, ms);
		this.setTime( date.getTime() );
		return ;
	}
	var date = new Date(y, m, d, h, mi, s, ms+amount);
	this.setTime( date.getTime() );
	return ;
}
	

	/**
	 * *判断是否为当年当月的最后一天
	 */
function isLastDay(yearV, monthV, dayV) {
	var new_year = yearV; // 取当前的年份
	var new_month = monthV + 1;// 取下一个月的第一天，方便计算（最后一天不固定）
	if (new_month > 12) // 如果当前大于12月，则年份转到下一年
	{
		new_month -= 12; // 月份减
		new_year++; // 年份增
	}
	var new_date = new Date(new_year, new_month, 1); // 取当年当月中的第一天
	var lastDay = (new Date(new_date.getTime() - 1000 * 60 * 60 * 24))
			.getDate();// 获取当月最后一天日期
	if (lastDay == dayV) {
		return true;
	} else {
		return false;
	}
}
/**
 * *计算距离月底还有几天
 */
function getLastDayAway(yearV, monthV, dayV) {
	var new_year = yearV; // 取当前的年份
	var new_month = monthV + 1;// 取下一个月的第一天，方便计算（最后一天不固定）
	if (new_month > 12) // 如果当前大于12月，则年份转到下一年
	{
		new_month -= 12; // 月份减
		new_year++; // 年份增
	}
	var new_date = new Date(new_year, new_month, 1); // 取当年当月中的第一天
	var lastDay = (new Date(new_date.getTime() - 1000 * 60 * 60 * 24))
			.getDate();// 获取当月最后一天日期
	var away_day = lastDay - dayV;
	return away_day;
}
/**
 * @param startDate
 *            开始日期
 * @param endDate
 *            结束日期
 * @return 计算相差月份，必须满足正好一个月才进一
 */
function getDateMonthSub(startDate, endDate) {
	if (startDate == null || startDate == undefined || startDate == ""
			|| endDate == null || endDate == undefined || endDate == "")
		return 0;
	var endDate = new Date(endDate);
	var startDate = new Date(startDate);
	var renNumber = 0;
	var yearToMonth = (endDate.getFullYear() - startDate.getFullYear()) * 12;
	// 计算年份相差月份
	renNumber += yearToMonth;
	var startYear = startDate.getFullYear();// 开始日期-年份
	var endYear = endDate.getFullYear();// 结束日期-年份
	var startMon = startDate.getMonth();// 开始日期-月份
	var endMon = endDate.getMonth();// 结束日期-月份
	var startDay = startDate.getDate();// 开始日期-日
	var endDay = endDate.getDate();// 开始日期-日
	var monthToMonth = endDate.getMonth() - startDate.getMonth();
	// 计算月份相差
	renNumber += monthToMonth;
	// 如果开始日期是最后一天并且结束日期不是最后一天，那么返回值-1
	if (isLastDay(startYear, startMon, startDay)
			&& !isLastDay(endYear, endMon, endDay)) {
		renNumber -= 1;
		return renNumber;
	} else {
		// 如果开始日期和结束日期都不是最后一天
		if (!isLastDay(startYear, startMon, startDay)
				&& !isLastDay(endYear, endMon, endDay)) {
			// 如果都不是最后一天，就需要计算开始日期和结束日期的天数距离结束还有几天,分别为start_last,end_last
			var start_last = getLastDayAway(startYear, startMon, startDay);
			var end_last = getLastDayAway(endYear, endMon, endDay);
			// 如果结束日期距离月底的天数比开始日期距离月底的天数大，则返回值-1
			if (end_last > start_last) {
				renNumber -= 1;
				return renNumber;
			} else {
				return renNumber;
			}
		} else {
			// 如果开始日期和结束日期的天都是当月的最后一天，那么相差月份就是实际月份相减的值
			// 其他情况都直接返回renNumber
			return renNumber;
		}
	}
}